import plotly.express as px
import plotly.figure_factory as ff
import numpy as np
import geopandas as gpd
import pandas as pd
Primera Visualización - Cartograma¶
En la primera visualización, se usa la librería Plotly para generear un mapa modificado ligeramente.
Los datos que representa corresponden al Producto Interior Bruto (PIB) nominal de las diferentes Comunidades Autónomas (CCAA), excepto Canarias, para el año 2022.
El mapa representa de forma distorsionada la relevancia del PIB de cada CCAA. Además, se ha añadido un código de colores en azul que premite visualizar fácilmente qué PIB tiene cada CCAA según la intensidad (a mayor PIB más oscuro es el color azul), que además se aclara en la leyenda.
El mapa se ha obtenido de la web go-kart, en donde tras introducir los datos del PIB publicados en el INE se han indicado los valores correspondientes a cada región del mapa disponible en la web, y se ha generado una visualización con la librería Plotly que se ha exportado en formato GeoJSON.
Para obtener más información de cada región, se puede poner el cursor encima de los datos para obtener mnás información detallada, como la posición de dicha CCAA respecto del total, así como el valor exacto del PIB.
# Primera Visualización
## Lectura de datos desde fichero GeoJSON
gdf_gdp = gpd.read_file("G:/Mi unidad/Aa-UOC/2_2C/VDatos/PEC2/spain_gdp_template.geojson")
## Renombrado de ampos y ordenación de valores
gdf_gdp = gdf_gdp.rename(columns=dict(name="Comunidad Autónoma",
value="PIB (en Euros)"))
gdf_gdp = gdf_gdp.sort_values(by=["PIB (en Euros)", "Comunidad Autónoma"], ascending=False)
gdf_gdp.index = np.arange(1, len(gdf_gdp) + 1)
gdf_gdp[["Comunidad Autónoma", "PIB (en Euros)"]].style
| Comunidad Autónoma | PIB (en Euros) | |
|---|---|---|
| 1 | Comunidad de Madrid | 261713090 |
| 2 | Cataluna | 255153805 |
| 3 | Andalucia | 180224284 |
| 4 | Comunidad Valenciana | 126416306 |
| 5 | Pais Vasco | 79350168 |
| 6 | Galicia | 69829687 |
| 7 | Castilla y Leon | 64226642 |
| 8 | Castilla-La Mancha | 46715873 |
| 9 | Aragon | 41762830 |
| 10 | Region de Murcia | 35809533 |
| 11 | Islas Baleares | 35465293 |
| 12 | Principado de Asturias | 25822416 |
| 13 | Comunidad Foral de Navarra | 22595257 |
| 14 | Extremadura | 22530837 |
| 15 | Cantabria | 15354834 |
| 16 | La Rioja | 9501978 |
| 17 | Ceuta | 1907382 |
| 18 | Melilla | 1756761 |
## Cartograma del PIB por CCAA
gdp_suma = sum(gdf_gdp["PIB (en Euros)"])/1000000
px.choropleth_mapbox(
gdf_gdp,
geojson=gdf_gdp["geometry"].__geo_interface__,
locations=gdf_gdp.index,
color="PIB (en Euros)",
hover_name="Comunidad Autónoma",
color_continuous_scale=[(0, "white"), (0.5, "cyan"), (1, "blue")]
).update_layout(
title="Producto Interior Bruto (PIB) nominal por Comunidades Autónomas (2022) <br>" +
"Península, Baleares, Ceuta y Melilla <br>" +
"PIB total: <b>" + str(round(gdp_suma, 2)) + " M€",
mapbox={
"style": "white-bg",
# "center": dict(lat = 40.41, lon = -3.70),
"zoom":7,
},
margin={"l":0,"r":0,"t":40,"b":0},
font=dict(size=11)
)
Segunda Visualización - Dendrograma Lineal¶
En la segunda visualización se muestra una agrupación de los países de la Unión Europea (UE) en relación al porcentaje de desempleo durante el año 2023.
Los datos se han obtenido del Eurostat, en donde se desglosa el porcentaje de desempleo de cada estado de la UE (se incluye un campo que representa la media de la UE, EU27_2020) para cada mes durante el año 2023. La gráfica se ha generado usando la librería Plotly de Python.
El dendrograma muestra agrupaciones de países con porcentajes similares. Como se puede ver a continuación, países como España o Grecia son unidos debido a que ambos países poseen cerca de un 11% de desempleo, a la vez que países como Italia, Francia, Suecia o Finlandia también son agrupados en el mismo subgrupo puesto que comparten valores de desempleo alrededor de un 7.5%.
# Segunda Visualización
## Lectura de los datos en CSV y edición de los nombres de los estados
file = "G:/Mi unidad/Aa-UOC/2_2C/VDatos/PEC2/eurostat_eu_unemployment_2023_months.csv"
df = pd.read_csv(file)
country_names = ["Austria", "Belgium", "Bulgaria", "Cyprus", "Czechia", "Germany", "Denmark", "Estonia",
"Greece", "Spain", "EU27-2023 Average", "Finland", "France", "Croatia", "Hungary",
"Ireland", "Italy", "Lithuania", "Luxembourg", "Latvia", "Malta", "Netherlands",
"Poland", "Portugal", "Romania", "Sweden", "Slovenia", "Slovakia"]
df["country"] = country_names
df.rename(columns=dict(country="País UE")).style.format(precision=1)
| País UE | Jan | Feb | Mar | Apr | May | Jun | Jul | Ago | Sep | Oct | Nov | Dec | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Austria | 5.2 | 5.0 | 4.6 | 5.1 | 4.8 | 5.1 | 5.5 | 5.4 | 5.4 | 5.1 | 5.0 | 5.4 |
| 1 | Belgium | 5.7 | 5.6 | 5.6 | 5.6 | 5.7 | 5.6 | 5.3 | 5.3 | 5.4 | 5.5 | 5.5 | 5.6 |
| 2 | Bulgaria | 4.0 | 4.1 | 4.2 | 4.3 | 4.3 | 4.5 | 4.5 | 4.5 | 4.5 | 4.5 | 4.4 | 4.3 |
| 3 | Cyprus | 6.5 | 6.4 | 6.2 | 6.1 | 6.1 | 6.1 | 6.1 | 6.0 | 5.9 | 5.9 | 6.0 | 6.2 |
| 4 | Czechia | 2.5 | 2.5 | 2.6 | 2.7 | 2.5 | 2.7 | 2.7 | 2.5 | 2.7 | 2.9 | 2.5 | 2.8 |
| 5 | Germany | 3.0 | 2.9 | 2.9 | 2.9 | 2.9 | 3.0 | 3.0 | 3.0 | 3.1 | 3.1 | 3.1 | 3.1 |
| 6 | Denmark | 4.3 | 5.2 | 4.7 | 5.0 | 4.8 | 4.7 | 5.4 | 4.2 | 4.8 | 6.2 | 6.1 | 6.3 |
| 7 | Estonia | 5.1 | 5.1 | 5.7 | 6.1 | 6.6 | 7.1 | 7.6 | 7.5 | 6.7 | 6.3 | 6.4 | 7.0 |
| 8 | Greece | 11.3 | 11.2 | 11.3 | 11.5 | 11.1 | 11.1 | 11.0 | 11.0 | 10.7 | 10.6 | 10.8 | 10.5 |
| 9 | Spain | 13.0 | 12.9 | 12.5 | 12.1 | 11.9 | 11.9 | 11.9 | 11.9 | 11.9 | 11.9 | 11.8 | 11.7 |
| 10 | EU27-2023 Average | 6.1 | 6.0 | 6.0 | 6.0 | 6.0 | 6.0 | 6.0 | 6.0 | 6.1 | 6.1 | 6.1 | 6.0 |
| 11 | Finland | 7.0 | 6.6 | 6.6 | 7.1 | 7.1 | 7.2 | 7.5 | 7.3 | 7.5 | 7.5 | 7.7 | 7.5 |
| 12 | France | 7.1 | 7.1 | 7.1 | 7.3 | 7.4 | 7.4 | 7.4 | 7.4 | 7.4 | 7.5 | 7.5 | 7.6 |
| 13 | Croatia | 6.5 | 6.3 | 6.2 | 6.1 | 6.1 | 6.2 | 6.3 | 6.4 | 6.3 | 6.3 | 6.2 | 6.1 |
| 14 | Hungary | 3.8 | 3.8 | 3.8 | 3.9 | 3.9 | 3.9 | 4.0 | 4.1 | 4.0 | 4.1 | 4.2 | 4.3 |
| 15 | Ireland | 4.2 | 4.1 | 4.1 | 4.1 | 4.1 | 4.3 | 4.4 | 4.4 | 4.6 | 4.5 | 4.5 | 4.5 |
| 16 | Italy | 7.9 | 7.8 | 7.9 | 7.8 | 7.7 | 7.5 | 7.7 | 7.5 | 7.7 | 7.7 | 7.5 | 7.3 |
| 17 | Lithuania | 6.7 | 7.1 | 6.9 | 6.4 | 6.4 | 6.4 | 6.6 | 7.0 | 7.2 | 7.3 | 7.2 | 7.0 |
| 18 | Luxembourg | 4.9 | 4.9 | 4.9 | 4.9 | 5.0 | 5.2 | 5.2 | 5.3 | 5.5 | 5.5 | 5.6 | 5.5 |
| 19 | Latvia | 6.2 | 6.1 | 6.0 | 6.2 | 6.4 | 6.6 | 6.6 | 6.6 | 6.6 | 6.8 | 6.9 | 7.0 |
| 20 | Malta | 3.5 | 3.5 | 3.4 | 3.2 | 3.1 | 2.9 | 2.9 | 3.1 | 3.1 | 2.9 | 2.9 | 2.9 |
| 21 | Netherlands | 3.6 | 3.5 | 3.5 | 3.4 | 3.5 | 3.5 | 3.6 | 3.6 | 3.7 | 3.6 | 3.5 | 3.6 |
| 22 | Poland | 2.7 | 2.7 | 2.7 | 2.7 | 2.8 | 2.8 | 2.8 | 2.8 | 2.9 | 3.0 | 3.0 | 3.0 |
| 23 | Portugal | 7.0 | 6.9 | 6.8 | 6.5 | 6.4 | 6.3 | 6.3 | 6.3 | 6.6 | 6.7 | 6.6 | 6.5 |
| 24 | Romania | 5.6 | 5.5 | 5.5 | 5.5 | 5.5 | 5.7 | 5.6 | 5.5 | 5.6 | 5.6 | 5.5 | 5.6 |
| 25 | Sweden | 7.3 | 7.7 | 7.2 | 7.2 | 7.2 | 8.0 | 7.1 | 8.1 | 8.1 | 7.9 | 7.9 | 8.2 |
| 26 | Slovenia | 3.5 | 3.6 | 3.7 | 3.7 | 3.8 | 3.8 | 3.8 | 3.8 | 3.7 | 3.6 | 3.5 | 3.3 |
| 27 | Slovakia | 6.1 | 6.0 | 6.0 | 5.9 | 5.8 | 5.8 | 5.9 | 5.9 | 5.8 | 5.7 | 5.6 | 5.6 |
## Dendrograma que agrupa los estados de la UE por la tasa de desempleo media durante 2023
X = df.loc[:, df.columns != "country"]
fig = ff.create_dendrogram(X, labels=country_names, color_threshold=3.0, orientation='left')
fig.update_layout(width=750, height=600,
title="Agrupaciones de países de la Unión Europea por porcentaje de desempleo en 2023",
xaxis_title="Diferencias de porcentaje de desempleo",
yaxis_title="Países de la UE",
plot_bgcolor="rgba(0, 0, 0, 0)")
fig.show()